Contemporary computer systems offer users the ability to magnify a portion of their display screen, typically for providing visually-impaired users with better accessibility to computers, although also offering mainstream users the benefit of magnification in certain contexts. In general, when the user runs a magnifier, a magnification window is opened and the magnified content displayed in that window. Often the user can adjust the magnification window in size and position, adjust the magnification level, and possibly choose other effects, e.g., color inversion.
Screen magnifiers are generally built to operate in one or more various modes. In a full-screen magnifier mode, the magnifier window occupies the entire screen, and the program magnifies a subset of the underlying content, typically depending on where the pointer indicator/cursor is located. A fixed mode provides a less-than-full screen window that is fixed on the screen, and typically magnifies some appropriate area that surrounds the pointer indicator/cursor. In a floating lens mode, the magnification window moves with the pointer indicator/cursor. With some magnification programs, a user may change between modes.
Previous magnification programs worked by inserting a driver in the video path above the main display driver to intercept graphics primitives, processing the primitives to build an off screen model to magnify the screen content, and then outputting the magnified screen content to the screen. An recent accessibility technology that provides an alternative to (or a complement to) driver-based magnifiers is described in U.S. patent application Ser. No. 11/180,859, filed Jul. 12, 2005, assigned to the assignee of the present invention and hereby incorporated by reference. This technology is (among its aspects) generally directed towards a magnification engine and API (application programming interface) that magnifier applications can leverage, and that renders a magnifier in software and/or hardware.
As can be readily appreciated, some magnifier modes such as full-screen mode and floating lens mode require the ability to capture and magnify screen content that is under the magnifier window. However, this leads to a problem, in that if the magnifier window magnifies itself, that is, magnifies already magnified content, recursive magnification will occur.
With the magnification engine and API solution, magnification is implemented via a special type of window referred to as a layered window. As a result, recursive magnification can be avoided by excluding layered windows from the screen content that is provided to the magnifier application program. However, excluding layered windows results in all windows that are marked layered as being excluded, including those that are not magnifier windows. This causes a problem, because other components make use of layered window technology, e.g., to output screen content including transparent/semi-opaque UI elements such as tooltips and user interface elements in recent application programs (e.g., Microsoft Corporation's Visual Studio® and Office 12 products). Depending on the mode of the magnifier, the result of the layered window exclusion is that these non-magnifier windows become invisible to an end-user, because as layered windows, their rendered output is not provided to the magnification program.